With the advent of digital media technology, it is feasible to provide on-Demand services such as Video-on-Demand (VoD) service to a large number of clients over a geographically distributed network. To guarantee continuous delivery of a video stream to the client, a streaming server is used for storing the resources.
A video streaming server is a device that is capable of streaming hundreds to thousands of video streams to Set Top Boxes or mobile terminal at customer premises. The content itself may reside on CD's, conventional rotating disks, flash disks or even RAM. The most used storage today is conventional disks because of its low price per data volume. In Video-on-Demand application a popular content can be streamed by many users during a hot period.
The requirement for the server, especially for disk I/O, can be very high since there are a large number of users. Streaming thousands of streams concurrently performs lots of disk I/O and network I/O, and introduces a huge CPU usage. Traditional buffer management policies employed by various software systems are based upon the concept of a “hot set” of data, which is not suitable for the Video-on-Demand environment.
To minimize the CPU usage direct I/O is applicable in most operating systems for the applications performing lot of disk I/O. Using direct I/O means application will bypass the operating system cache; so, it is very important to introduce an application level cache so as to reduce the repeatable disk I/O of hot contents and improve the VoD application performance.
In most VOD applications, the input and output of the disk are the bottleneck for the media streaming. To overcome this problem, a kind of mechanism named buffer cache mechanism is introduced by those skilled in the art to improve the performance of the streaming server. Currently a general content buffer reusage mechanism is adopted by most VoD streaming servers. In this mechanism, generally, only one piece of the content will be loaded from the conventional disk each time as per the user's requirement. However, the size of whole VoD file is usually too large for the server to load to the server memory. Hence, one VoD file is usually divided into a plurality of sections and is stored in the VoD content storage in form of sections. After one content section is loaded to one buffer memory, this section can be streamed to any users who require this content section. When this section is no more requested by any users, this section will be cleared and this buffer memory may be re-flushed with another section. However, there are problems with the above illustrated solutions. Mainly, there are some drawbacks as listed below in the buffer mechanism in the existing VoD application solutions.
For VoD applications, there is a statistical rule that 80 percentages of all the end users will watch the 20 percentage hot contents during a period of time. According to the current solutions, one hot content section will be released and will be no more stored in the server memory, when no user needs it. However, this hot content may be required soon after it is released since this content section is very popular. This will result in the repeatable disk I/O for the same content section, which will be still high during a period of time.
According one aspect of the existing solution, all the buffers will be released and all of the content sections will be cleared when the application server has no workload during the idle time. If the server meets the high traffic again, all of the content sections need to be reloaded from the disk, which brings heavier burden for the server.
Accordingly, it would be desirable to provide a method and a system for providing an efficient buffer management mechanism in an on-Demand environment to overcome the above disadvantages.